Redundant Arrays of Independent Disks (RAID) are commonly used to provide high performance and high reliability access to large amounts of data storage. There are several types of RAID, ranging from RAID 0 through RAID 6 (as well as some other combined types), although the most common for enterprise systems are RAID 5 and RAID 6. RAID 5 encodes stripes of data across a plurality of disks with one disk (which rotates from stripe to stripe) storing a parity redundancy code for that stripe, which allows stored data to be recovered even in the event of a disk failure. This parity code (often referred to as “row parity”) involves performing a compound exclusive-or (XOR) operation on corresponding blocks on the different disks. RAID 6 employs a similar approach, but using two redundancy disks, allowing stored data to be recovered even in the event of two disk failures. There are several ways of calculating the values stored on the redundancy disks for RAID 6, such as even-odd parity (which involved storing row parity on one disk and diagonal parity on another disk) and Reed-Solomon encoding.
Conventional approaches to providing high performance high reliability access to large disk arrays make use of various algebraic coding techniques using any number of redundancy disks, examples of such coding techniques including Hamming encoding, Cauchy matrix encoding, and Reed-Solomon encoding. One approach utilizes three redundancy disks, encoded, respectively, with row parity, diagonal parity, and anti-diagonal parity. An example of the latter approach is provided in U.S. Pat. No. 7,640,484.